cetus_writewpt(const waypoint* wpt)
{
struct cetus_wpt_s* rec;
- struct tm* tm;
char* vdata;
char* desc_long;
char* desc_short;
rec = (struct cetus_wpt_s*) xcalloc(sizeof(*rec)+18 + NOTESZ + DESCSZ,1);
+#if NEWTIME
+ QDate date(wpt->creation_time.date());
+ rec->day = date.day();
+ rec->mon = date.month();
+ be_write16(&rec->year, date.year());
+
+ QTime time(wpt->creation_time.time());
+ rec->min = time.minute();
+ rec->hour = time.hour();
+ rec->sec = time.second();
+
+#else
+ struct tm* tm;
if (wpt->creation_time && (NULL != (tm = gmtime(&wpt->creation_time)))) {
rec->min = tm->tm_min;
rec->hour = tm->tm_hour;
rec->mon = 0xff;
be_write16(&rec->year, 0xff);
}
+#endif
be_write32(&rec->longitude, (unsigned int)(int)(wpt->longitude * 10000000.0));
be_write32(&rec->latitude, (unsigned int)(wpt->latitude * 10000000.0));
if (wpt->altitude == unknown_alt) {
int fix=fix_unknown;
//TICK; TIME; LONG; LAT; HEIGHT; SPEED; UN; HDOP; SAT
//3801444, 080558, 2.944362, 43.262117, 295.28, 0.12964, 2, 2.900000, 3
+#if NEWTIME
+ snprintf(tbuffer, sizeof(tbuffer), "%06d", wpt->creation_time.hms());
+#else
strftime(tbuffer, sizeof(tbuffer), "%H%M%S", gmtime(&wpt->creation_time));
+#endif
if (wpt->fix!=fix_unknown) {
switch (wpt->fix) {
case fix_none:
time_t
xml_parse_time(const char* cdatastr, int* microsecs)
{
+#if NEWTIME
+ time_t rv = 0;
+ QString string_date(cdatastr);
+
+ // Lovely. It looks like the OSM format triggers Qt Bug 18290. by
+ // leaving it ambiguous whether DST is in effect, which triggers local
+ // time. Allegedly fixed in Qt 5.0, but trivial to work around.
+ // https://bugreports.qt-project.org/browse/QTBUG-18290
+ if (string_date.endsWith("+00:00")) {
+ string_date.replace("+00:00", "Z");
+ }
+ QDateTime dt(QDateTime::fromString(string_date, Qt::ISODate));
+
+ if (dt.isValid()) {
+ rv = dt.toTime_t();
+ if (microsecs) {
+ *microsecs = dt.time().msec() * 1000;
+ }
+ }
+ return rv;
+#else
int off_hr = 0;
int off_min = 0;
int off_sign = 1;
xfree(timestr);
return rv;
+#endif
}
static void
static void holux_disp(const waypoint* wpt)
{
double lon,lat;
- struct tm* tm;
short sIndex;
WPT* pWptHxTmp;
/*set the time */
if (wpt->creation_time) {
/* tm = gmtime(&wpt->creation_time);*/ /* I get the wrong result with gmtime ??? */
+#if NEWTIME
+ QDate date(wpt->creation_time.date());
+ QTime time(wpt->creation_time.time());
+ pWptHxTmp->time = (time.hour() * 3600) + (time.minute()* 60) + time.second();
+ pWptHxTmp->date.day = date.day();
+ pWptHxTmp->date.month = date.month();
+ pWptHxTmp->date.year = date.year();
+#else
+ struct tm* tm;
tm = localtime(&wpt->creation_time);
pWptHxTmp->time = (tm->tm_hour * 3600) + (tm->tm_min * 60) +tm->tm_sec;
pWptHxTmp->date.day = tm->tm_mday;
pWptHxTmp->date.month = tm->tm_mon + 1;
pWptHxTmp->date.year = tm->tm_year + 1900;
+#endif
} else {
pWptHxTmp->time = 0;
pWptHxTmp->date.day = 0;
// Timestamp
kml_output_timestamp(waypointp);
if (waypointp->creation_time) {
+#if NEWTIME
+ strcpy(date_placed,
+ qPrintable(waypointp->creation_time.toString("dd-MMM-yyyy")));
+#else
strftime(date_placed, sizeof(date_placed),
"%d-%b-%Y", localtime(&waypointp->creation_time));
+#endif
} else {
date_placed[0] = '\0';
}
{
unsigned char * workbuffer =0;
size_t position =0;
- struct tm* tmstructp =0;
double seconds =0;
++count;
WriteDouble(&workbuffer[position], waypointp->altitude);
}
position += sizeof(double);
-
+#if NEWTIME
+ QDate date(waypointp->creation_time.date());
+ QTime time(waypointp->creation_time.time());
+ workbuffer[position++] = date.year()-100;
+ workbuffer[position++] = date.month();
+ workbuffer[position++] = date.day();
+ workbuffer[position++] = time.hour();
+ workbuffer[position++] = time.minute();
+#else
+ struct tm* tmstructp =0;
tmstructp = gmtime(&waypointp->creation_time);
seconds = (double) tmstructp->tm_sec + 0.0000001*waypointp->microseconds;
workbuffer[position++] =tmstructp->tm_mday;
workbuffer[position++] =tmstructp->tm_hour;
workbuffer[position++] =tmstructp->tm_min;
+#endif
WriteDouble(&workbuffer[position], seconds);
position += sizeof(double);